<?php


namespace app\api\controller;


use app\api\model\Member as MemberModel;
use app\api\model\MemberToken;
use think\facade\Filesystem;

class Member
{
    public $memberId;
    public $memberData;
    //此方法为类加载的时候一定会执行的方法，可以做一些公共操作例如：校验token
    //1：校验有没有传token参数
    //2：校验token在数据库中是否存在，是否过期，是否被禁用
    //3：校验token是与数据库中的用户匹配
    public function __construct()
    {
        //1：校验有没有传token参数
        $token = input('get.token');
        if (empty($token)) output_error('请登录~');
        //2：校验token在数据库中是否存在，是否过期，是否被禁用
        //find方法 只查一条数据，返回的是对象 select 方法 返回的数组 查多条数据
        $tokenData = MemberToken::where('token_content', '=', $token)->find();
        if (empty($tokenData)) output_error('请登录~');//校验token在数据库中是否存在
        if ($tokenData['end_time'] < time()) output_error('请登录~');//校验token在数据库中是否过期
        //校验token是否被禁用
        if ($tokenData['token_state'] == '2') output_error('请登录~');
        $this->memberId = $tokenData['member_id'];//将tokendata数组的member_id字段的值赋值给memberId变量
        $this->memberData = MemberModel::where('member_id', '=', $this->memberId)->find();
    }

    public function getMemberData()
    {
        $this->memberData['member_avatar'] = URL_AVATAR . $this->memberData['member_avatar'];
        output_data($this->memberData);
    }

    //注销登录接口
    public function logout()
    {
        MemberToken::where('token_content', '=', input('token'))->update(array('token_state' => '2'));
        output_data('1');
    }

    //修改头像接口

    //修改密码接口
    public function modifyPassword()
    {
        //修改密码的逻辑：
        //判断原始密码是否正确
        $old = input('get.old');
        $new = input('get.new');
        if (empty($old) || empty($new)) output_error('请输入旧密码与密码');
        //判断新密码不小于6位即可 strlen函数返回某个字符串的长度
        if (strlen($new) < 6) output_error('新密码不能小于6位');
        if ($this->memberData['member_password'] != md5($old)) output_error('旧密码不正确');
        //修改新密码
        MemberModel::where('member_id', '=', $this->memberId)->update(array('member_password' => md5($new)));
        //输出成功地标识
        output_data('1');
    }

    //修改昵称接口
    public function modifyNickname()
    {
        //昵称要求：唯一
        $nickname = input('get.nickname');
        if (empty($nickname)) output_error('请输入昵称');
        //校验昵称是否存在
        $data = MemberModel::where('member_nickname', '=', $nickname)->find();
        if (!empty($data)) output_error('昵称已被他人使用');
        MemberModel::where('member_id', '=', $this->memberId)->update(array('member_nickname' => $nickname));
        //输出成功地标识
        output_data('1');
    }

    //修改性别接口
    public function modifyGender()
    {
        //昵称要求：唯一
        $gender = input('get.gender');
        if (empty($gender)) output_error('请输入性别');
        MemberModel::where('member_id', '=', $this->memberId)->update(array('member_gender' => $gender));
        //输出成功地标识
        output_data('1');
    }

    //修改手机号码
    public function modifyMobile()
    {
        //手机号码要求：唯一
    }

    //修改用户头像
    public function modifyAvatar()
    {
        //第一步：上传文件拿到文件名
        $file = request()->file('image');
        $name = Filesystem::disk('avatar')->putFile('', $file, 'uniqid');
        //第二步：删除原有文件
        if ($this->memberData['member_avatar'] != 'default.png') {
            $filename = app()->getRootPath() . 'public\\upload\\images\\avatar\\' . $this->memberData['member_avatar'];
            unlink($filename);
        }
        //第三步：更新数据表
        MemberModel::where('member_id', '=', $this->memberId)->update(array('member_avatar' => $name));
        output_data(URL_AVATAR . $name);
    }

}
